package dao;

import hbt.HbtUtil;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import bean.ProveedorVO;

public class HbtProveedorDao {

	private static HbtProveedorDao instancia = null;
	private static SessionFactory sf = null;

	public static HbtProveedorDao getInstancia() {
		if (instancia == null) {
			sf = HbtUtil.getSessionFactory();
			instancia = new HbtProveedorDao();
		}
		return instancia;
	}

	public void guardarProveedores(List<ProveedorVO> proveedores) {
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(proveedores);
		session.flush();
		session.getTransaction().commit();
		session.close();
	}

	public void guardarProveedor(ProveedorVO proveedor) {
		Session session = sf.openSession();
		session.beginTransaction();
		session.persist(proveedor);
		session.flush();
		session.getTransaction().commit();
		session.close();
		
	}

	public void eliminarProveedor(ProveedorVO proveedor) {

		String cuit = proveedor.getCuit();
		System.out.println(cuit);
		System.out.println(cuit.length());

		Session s = null;

		try {
			s = sf.openSession();
			s.beginTransaction();
			Query query = s.createQuery(
					"Delete from ProveedorVO p where p.cuit = :cuit")
					.setString("cuit", cuit);
			query.executeUpdate();
			s.flush();
			s.getTransaction().commit();
			s.close();

		} catch (HibernateException e) {
			e.printStackTrace();
			System.out.println("No  se puedo borrar el Proveedor");
			if (s != null)
				s.close();
		}

	}

	public ProveedorVO obtenerProveedor(ProveedorVO p) {
		Session session = sf.openSession();
		ProveedorVO Proveedor = (ProveedorVO) session.get(ProveedorVO.class,
				p.getCuit());
		session.close();
		return Proveedor;
	}

	public void actualizarProveedor(ProveedorVO proveedor) {
		try {

			Session session = sf.openSession();
			session.beginTransaction();
			session.update(proveedor);
			session.getTransaction().commit();
			session.close();

		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
	}

	@SuppressWarnings("unchecked")
	public List<ProveedorVO> obtenerTodos() {
		List<ProveedorVO> proveedores = new ArrayList<ProveedorVO>();
		Session session = null;
		session = sf.openSession();
		session.beginTransaction();
		proveedores = session.createQuery("from ProveedorVO").list();
		session.getTransaction().commit();
		session.close();
		return proveedores;

	}
	
	public boolean existeProveedor(ProveedorVO proveedor) {
		if(obtenerProveedor(proveedor) == null)
			return false;
		else
			return true;
				
	}

}
